#ifndef CUFFTDX_FFT_15_FP64_FWD_PTX_HPP
#define CUFFTDX_FFT_15_FP64_FWD_PTX_HPP



template<> __forceinline__ __device__ void cufftdx_private_function<406, double, 1>(cufftdx::detail::complex<double> *rmem, unsigned smem){

asm volatile (R"({
.reg .f64 fd<313>;
.reg .b64 rd<2>;
add.f64 fd61, %38, %62;
add.f64 fd62, %30, fd61;
add.f64 fd63, %46, %54;
add.f64 fd64, fd63, fd62;
add.f64 fd65, %39, %63;
add.f64 fd66, %31, fd65;
add.f64 fd67, %47, %55;
add.f64 fd68, fd67, fd66;
fma.rn.f64 fd69, fd61, 0d3FD3C6EF372FE950, %30;
mul.f64 fd70, fd63, 0d3FE9E3779B97F4A8;
sub.f64 fd71, fd69, fd70;
sub.f64 fd72, %39, %63;
mul.f64 fd73, fd72, 0d3FEE6F0E134454FF;
sub.f64 fd74, %47, %55;
mul.f64 fd75, fd74, 0dBFE2CF2304755A5E;
sub.f64 fd76, fd75, fd73;
sub.f64 fd77, fd71, fd76;
add.f64 fd78, fd76, fd71;
mul.f64 fd79, fd61, 0d3FE9E3779B97F4A8;
sub.f64 fd80, %30, fd79;
fma.rn.f64 fd81, fd63, 0d3FD3C6EF372FE950, fd80;
mul.f64 fd82, fd72, 0d3FE2CF2304755A5E;
mul.f64 fd83, fd74, 0d3FEE6F0E134454FF;
sub.f64 fd84, fd83, fd82;
sub.f64 fd85, fd81, fd84;
add.f64 fd86, fd84, fd81;
fma.rn.f64 fd87, fd65, 0d3FD3C6EF372FE950, %31;
mul.f64 fd88, fd67, 0d3FE9E3779B97F4A8;
sub.f64 fd89, fd87, fd88;
sub.f64 fd90, %38, %62;
mul.f64 fd91, fd90, 0d3FEE6F0E134454FF;
sub.f64 fd92, %46, %54;
mul.f64 fd93, fd92, 0dBFE2CF2304755A5E;
sub.f64 fd94, fd93, fd91;
add.f64 fd95, fd94, fd89;
sub.f64 fd96, fd89, fd94;
mul.f64 fd97, fd65, 0d3FE9E3779B97F4A8;
sub.f64 fd98, %31, fd97;
fma.rn.f64 fd99, fd67, 0d3FD3C6EF372FE950, fd98;
mul.f64 fd100, fd90, 0d3FE2CF2304755A5E;
mul.f64 fd101, fd92, 0d3FEE6F0E134454FF;
sub.f64 fd102, fd101, fd100;
add.f64 fd103, fd102, fd99;
sub.f64 fd104, fd99, fd102;
add.f64 fd105, %40, %64;
add.f64 fd106, %32, fd105;
add.f64 fd107, %48, %56;
add.f64 fd108, fd107, fd106;
add.f64 fd109, %42, %66;
add.f64 fd110, %34, fd109;
add.f64 fd111, %50, %58;
add.f64 fd112, fd111, fd110;
fma.rn.f64 fd113, fd105, 0d3FD3C6EF372FE950, %32;
mul.f64 fd114, fd107, 0d3FE9E3779B97F4A8;
sub.f64 fd115, fd113, fd114;
sub.f64 fd116, %42, %66;
mul.f64 fd117, fd116, 0d3FEE6F0E134454FF;
sub.f64 fd118, %50, %58;
mul.f64 fd119, fd118, 0dBFE2CF2304755A5E;
sub.f64 fd120, fd119, fd117;
sub.f64 fd121, fd115, fd120;
add.f64 fd122, fd120, fd115;
mul.f64 fd123, fd105, 0d3FE9E3779B97F4A8;
sub.f64 fd124, %32, fd123;
fma.rn.f64 fd125, fd107, 0d3FD3C6EF372FE950, fd124;
mul.f64 fd126, fd116, 0d3FE2CF2304755A5E;
mul.f64 fd127, fd118, 0d3FEE6F0E134454FF;
sub.f64 fd128, fd127, fd126;
sub.f64 fd129, fd125, fd128;
add.f64 fd130, fd128, fd125;
fma.rn.f64 fd131, fd109, 0d3FD3C6EF372FE950, %34;
mul.f64 fd132, fd111, 0d3FE9E3779B97F4A8;
sub.f64 fd133, fd131, fd132;
sub.f64 fd134, %40, %64;
mul.f64 fd135, fd134, 0d3FEE6F0E134454FF;
sub.f64 fd136, %48, %56;
mul.f64 fd137, fd136, 0dBFE2CF2304755A5E;
sub.f64 fd138, fd137, fd135;
add.f64 fd139, fd138, fd133;
sub.f64 fd140, fd133, fd138;
mul.f64 fd141, fd109, 0d3FE9E3779B97F4A8;
sub.f64 fd142, %34, fd141;
fma.rn.f64 fd143, fd111, 0d3FD3C6EF372FE950, fd142;
mul.f64 fd144, fd134, 0d3FE2CF2304755A5E;
mul.f64 fd145, fd136, 0d3FEE6F0E134454FF;
sub.f64 fd146, fd145, fd144;
add.f64 fd147, fd146, fd143;
sub.f64 fd148, fd143, fd146;
add.f64 fd149, %43, %67;
add.f64 fd150, %35, fd149;
add.f64 fd151, %51, %59;
add.f64 fd152, fd151, fd150;
add.f64 fd153, %45, %68;
add.f64 fd154, %37, fd153;
add.f64 fd155, %53, %61;
add.f64 fd156, fd155, fd154;
fma.rn.f64 fd157, fd149, 0d3FD3C6EF372FE950, %35;
mul.f64 fd158, fd151, 0d3FE9E3779B97F4A8;
sub.f64 fd159, fd157, fd158;
sub.f64 fd160, %45, %68;
mul.f64 fd161, fd160, 0d3FEE6F0E134454FF;
sub.f64 fd162, %53, %61;
mul.f64 fd163, fd162, 0dBFE2CF2304755A5E;
sub.f64 fd164, fd163, fd161;
sub.f64 fd165, fd159, fd164;
add.f64 fd166, fd164, fd159;
mul.f64 fd167, fd149, 0d3FE9E3779B97F4A8;
sub.f64 fd168, %35, fd167;
fma.rn.f64 fd169, fd151, 0d3FD3C6EF372FE950, fd168;
mul.f64 fd170, fd160, 0d3FE2CF2304755A5E;
mul.f64 fd171, fd162, 0d3FEE6F0E134454FF;
sub.f64 fd172, fd171, fd170;
sub.f64 fd173, fd169, fd172;
add.f64 fd174, fd172, fd169;
fma.rn.f64 fd175, fd153, 0d3FD3C6EF372FE950, %37;
mul.f64 fd176, fd155, 0d3FE9E3779B97F4A8;
sub.f64 fd177, fd175, fd176;
sub.f64 fd178, %43, %67;
mul.f64 fd179, fd178, 0d3FEE6F0E134454FF;
sub.f64 fd180, %51, %59;
mul.f64 fd181, fd180, 0dBFE2CF2304755A5E;
sub.f64 fd182, fd181, fd179;
add.f64 fd183, fd182, fd177;
sub.f64 fd184, fd177, fd182;
mul.f64 fd185, fd153, 0d3FE9E3779B97F4A8;
sub.f64 fd186, %37, fd185;
fma.rn.f64 fd187, fd155, 0d3FD3C6EF372FE950, fd186;
mul.f64 fd188, fd178, 0d3FE2CF2304755A5E;
mul.f64 fd189, fd180, 0d3FEE6F0E134454FF;
sub.f64 fd190, fd189, fd188;
add.f64 fd191, fd190, fd187;
sub.f64 fd192, fd187, fd190;
mul.f64 fd193, fd121, 0d3FED3BC3AEFF7F95;
mul.f64 fd194, fd139, 0dBFDA07F921061AD1;
sub.f64 fd195, fd193, fd194;
mul.f64 fd196, fd139, 0d3FED3BC3AEFF7F95;
fma.rn.f64 fd197, fd121, 0dBFDA07F921061AD1, fd196;
mul.f64 fd198, fd165, 0d3FE5698496E20BD8;
mul.f64 fd199, fd183, 0dBFE7C7D7A833BEC2;
sub.f64 fd200, fd198, fd199;
mul.f64 fd201, fd183, 0d3FE5698496E20BD8;
fma.rn.f64 fd202, fd165, 0dBFE7C7D7A833BEC2, fd201;
mul.f64 fd203, fd129, 0d3FE5698496E20BD8;
mul.f64 fd204, fd147, 0dBFE7C7D7A833BEC2;
sub.f64 fd205, fd203, fd204;
mul.f64 fd206, fd147, 0d3FE5698496E20BD8;
fma.rn.f64 fd207, fd129, 0dBFE7C7D7A833BEC2, fd206;
mul.f64 fd208, fd173, 0dBFBAC2609B3C576C;
mul.f64 fd209, fd191, 0dBFEFD31F94F867C6;
sub.f64 fd210, fd208, fd209;
mul.f64 fd211, fd191, 0dBFBAC2609B3C576C;
fma.rn.f64 fd212, fd173, 0dBFEFD31F94F867C6, fd211;
mul.f64 fd213, fd130, 0d3FD3C6EF372FE950;
mul.f64 fd214, fd148, 0dBFEE6F0E134454FF;
sub.f64 fd215, fd213, fd214;
mul.f64 fd216, fd148, 0d3FD3C6EF372FE950;
fma.rn.f64 fd217, fd130, 0dBFEE6F0E134454FF, fd216;
mul.f64 fd218, fd174, 0dBFE9E3779B97F4A8;
mul.f64 fd219, fd192, 0dBFE2CF2304755A5E;
sub.f64 fd220, fd218, fd219;
mul.f64 fd221, fd192, 0dBFE9E3779B97F4A8;
fma.rn.f64 fd222, fd174, 0dBFE2CF2304755A5E, fd221;
mul.f64 fd223, fd122, 0dBFBAC2609B3C576C;
mul.f64 fd224, fd140, 0dBFEFD31F94F867C6;
sub.f64 fd225, fd223, fd224;
mul.f64 fd226, fd140, 0dBFBAC2609B3C576C;
fma.rn.f64 fd227, fd122, 0dBFEFD31F94F867C6, fd226;
mul.f64 fd228, fd166, 0dBFEF4CFC327A0080;
mul.f64 fd229, fd184, 0d3FCA9CD9AC4258F6;
sub.f64 fd230, fd228, fd229;
mul.f64 fd231, fd184, 0dBFEF4CFC327A0080;
fma.rn.f64 fd232, fd166, 0d3FCA9CD9AC4258F6, fd231;
add.f64 fd233, fd108, fd152;
add.f64 fd234, fd112, fd156;
mul.f64 fd235, fd233, 0d3FE0000000000000;
sub.f64 fd236, fd64, fd235;
sub.f64 fd237, fd112, fd156;
mul.f64 fd238, fd237, 0d3FEBB67AE8584CAA;
mul.f64 fd239, fd234, 0d3FE0000000000000;
sub.f64 fd240, fd68, fd239;
sub.f64 fd241, fd108, fd152;
mul.f64 fd242, fd241, 0d3FEBB67AE8584CAA;
add.f64 fd243, fd195, fd200;
add.f64 fd244, fd197, fd202;
mul.f64 fd245, fd243, 0d3FE0000000000000;
sub.f64 fd246, fd77, fd245;
sub.f64 fd247, fd197, fd202;
mul.f64 fd248, fd247, 0d3FEBB67AE8584CAA;
mul.f64 fd249, fd244, 0d3FE0000000000000;
sub.f64 fd250, fd95, fd249;
sub.f64 fd251, fd195, fd200;
mul.f64 fd252, fd251, 0d3FEBB67AE8584CAA;
add.f64 fd253, fd205, fd210;
add.f64 fd254, fd207, fd212;
mul.f64 fd255, fd253, 0d3FE0000000000000;
sub.f64 fd256, fd85, fd255;
sub.f64 fd257, fd207, fd212;
mul.f64 fd258, fd257, 0d3FEBB67AE8584CAA;
mul.f64 fd259, fd254, 0d3FE0000000000000;
sub.f64 fd260, fd103, fd259;
sub.f64 fd261, fd205, fd210;
mul.f64 fd262, fd261, 0d3FEBB67AE8584CAA;
add.f64 fd263, fd215, fd220;
add.f64 fd264, fd217, fd222;
mul.f64 fd265, fd263, 0d3FE0000000000000;
sub.f64 fd266, fd86, fd265;
sub.f64 fd267, fd217, fd222;
mul.f64 fd268, fd267, 0d3FEBB67AE8584CAA;
mul.f64 fd269, fd264, 0d3FE0000000000000;
sub.f64 fd270, fd104, fd269;
sub.f64 fd271, fd215, fd220;
mul.f64 fd272, fd271, 0d3FEBB67AE8584CAA;
add.f64 fd273, fd225, fd230;
add.f64 fd274, fd227, fd232;
mul.f64 fd275, fd273, 0d3FE0000000000000;
sub.f64 fd276, fd78, fd275;
sub.f64 fd277, fd227, fd232;
mul.f64 fd278, fd277, 0d3FEBB67AE8584CAA;
mul.f64 fd279, fd274, 0d3FE0000000000000;
sub.f64 fd280, fd96, fd279;
sub.f64 fd281, fd225, fd230;
mul.f64 fd282, fd281, 0d3FEBB67AE8584CAA;
add.f64 %1, fd68, fd234;
add.f64 %0, fd64, fd233;
add.f64 %3, fd95, fd244;
add.f64 %2, fd77, fd243;
add.f64 %5, fd103, fd254;
add.f64 %4, fd85, fd253;
add.f64 %7, fd104, fd264;
add.f64 %6, fd86, fd263;
add.f64 %9, fd96, fd274;
add.f64 %8, fd78, fd273;
sub.f64 %11, fd240, fd242;
add.f64 %10, fd238, fd236;
sub.f64 %13, fd250, fd252;
add.f64 %12, fd248, fd246;
sub.f64 %15, fd260, fd262;
add.f64 %14, fd258, fd256;
sub.f64 %17, fd270, fd272;
add.f64 %16, fd268, fd266;
sub.f64 %19, fd280, fd282;
add.f64 %18, fd278, fd276;
add.f64 %21, fd242, fd240;
sub.f64 %20, fd236, fd238;
add.f64 %23, fd252, fd250;
sub.f64 %22, fd246, fd248;
add.f64 %25, fd262, fd260;
sub.f64 %24, fd256, fd258;
add.f64 %27, fd272, fd270;
sub.f64 %26, fd266, fd268;
add.f64 %29, fd282, fd280;
sub.f64 %28, fd276, fd278;
})"
     : "=d"(rmem[0].x), "=d"(rmem[0].y), "=d"(rmem[1].x), "=d"(rmem[1].y), "=d"(rmem[2].x), "=d"(rmem[2].y), "=d"(rmem[3].x), "=d"(rmem[3].y), "=d"(rmem[4].x), "=d"(rmem[4].y), "=d"(rmem[5].x), "=d"(rmem[5].y), "=d"(rmem[6].x), "=d"(rmem[6].y), "=d"(rmem[7].x), "=d"(rmem[7].y), "=d"(rmem[8].x), "=d"(rmem[8].y), "=d"(rmem[9].x), "=d"(rmem[9].y), "=d"(rmem[10].x), "=d"(rmem[10].y), "=d"(rmem[11].x), "=d"(rmem[11].y), "=d"(rmem[12].x), "=d"(rmem[12].y), "=d"(rmem[13].x), "=d"(rmem[13].y), "=d"(rmem[14].x), "=d"(rmem[14].y): "d"(rmem[0].x), "d"(rmem[0].y), "d"(rmem[1].x), "d"(rmem[1].y), "d"(rmem[1].y), "d"(rmem[2].x), "d"(rmem[2].y), "d"(rmem[2].y), "d"(rmem[3].x), "d"(rmem[3].y), "d"(rmem[4].x), "d"(rmem[4].y), "d"(rmem[4].y), "d"(rmem[5].x), "d"(rmem[5].y), "d"(rmem[5].y), "d"(rmem[6].x), "d"(rmem[6].y), "d"(rmem[7].x), "d"(rmem[7].y), "d"(rmem[7].y), "d"(rmem[8].x), "d"(rmem[8].y), "d"(rmem[8].y), "d"(rmem[9].x), "d"(rmem[9].y), "d"(rmem[10].x), "d"(rmem[10].y), "d"(rmem[10].y), "d"(rmem[11].x), "d"(rmem[11].y), "d"(rmem[11].y), "d"(rmem[12].x), "d"(rmem[12].y), "d"(rmem[13].x), "d"(rmem[13].y), "d"(rmem[13].y), "d"(rmem[14].x), "d"(rmem[14].y));
};


#endif
